/**
 * iterator是一种接口，为各种不同的数据结构提供统一的访问机制。任何数据只要部署iterator接口，就可以完成便利操作
 * iterator的作用：
 * 1. 一是为各种数据结构，提供一个统一的简便的访问接口
 * 2. 使得数据结构的成员能够按某种次序排列
 * 3. 主要供es6新的遍历命令for-of循环
 * 4. for-in遍历
 * 三类数据结构具备iterator接口: 数组，某些类似数组的对象，set和map结构
 */

// 基本使用
// let arr = ['1', '2']
// let map = arr[Symbol.iterator]()
// console.log(map.next());

// for of
let arr = [1, 2]
for(let value of arr) {
    console.log(value); // 1 2
}

// 对象处理
let obj = {
    start:[1, 2, 3],
    end:[6, 7, 8],
    [Symbol.iterator]() {
        let index = 0;
        let arr = this.start.concat(this.end)
        return {
            next() {
                if(index < arr.length) {
                    return {
                        value: arr[index++],
                        done: false
                    }
                }
                else {
                    return {
                        value: arr[index++],
                        done: true
                    }
                }
            }
        }
    }
}
for(let key of obj) {
    console.log(key);
}